# Ambrevar C-style

# Inspired by K&R and Go, with function opening brace on the same line.
# We enforce some sane properties, such as UTF-8 and LF newlines.
# No alignment, tab-indented.

################################################################################
# General options

newlines = lf
utf8_bom = remove
utf8_byte = true
utf8_force = true

################################################################################
# Indenting

# 1=indent to level only, 2=indent with tabs
indent_with_tabs = 2

input_tab_size = 8
indent_columns = output_tab_size

# How to indent goto labels
#  >0 : absolute column where 1 is the leftmost column
#  <=0 : subtract from brace indent
indent_label = 0

# Whether to indent comments found in first column
indent_col1_comment = true    # false/true

# The continuation indent. If non-zero, this overrides the indent of '(' and '=' continuation indents.
# For FreeBSD, this is set to 4. Negative value is absolute and not increased for each ( level
indent_continue = output_tab_size        # number

################################################################################
# Code modifying options (non-whitespace)

mod_paren_on_return = remove # "return 1;" -> "return (1);"
mod_full_brace_if = force # "if (a) a--;" -> "if (a) { a--; }"
mod_full_brace_for = force
mod_full_brace_do = force
mod_full_brace_while = force

################################################################################
# Newline adding and removing options

nl_enum_brace = remove # "enum \n {" -> "enum {"
nl_union_brace = remove
nl_struct_brace = remove
nl_do_brace = remove
nl_if_brace = remove
nl_for_brace = remove
nl_else_brace = remove
nl_while_brace = remove
nl_switch_brace = remove
nl_fcall_brace = remove
nl_fdef_brace = remove
nl_brace_while = remove
nl_brace_else = remove

# Whether to not put blanks after '#ifxx', '#elxx', or before '#endif'
# nl_squeeze_ifdef = true

# Add or remove newline between return type and function name in a function definition
nl_func_type_name = remove

# Whether to remove blank lines before/after '}'/'{' respectively.
eat_blanks_before_close_brace = true
eat_blanks_after_open_brace = true

# nl_after_return = true
# nl_func_var_def_blk = 1
# nl_before_case = 1

################################################################################
# Spacing options

sp_arith = force
sp_assign = force
sp_bool = force
sp_compare = force
sp_before_semi = remove
sp_before_square = remove
sp_before_squares = remove
sp_inside_square = remove
sp_after_comma = force
sp_after_cast = remove # "(int) a" -> "(int)a"
sp_after_sparen = force # "if (){" -> "if () {"
sp_before_sparen = force # "if (" -> "if("
sp_inside_paren = remove # "( 1 )" -> "(1)"
sp_paren_paren = remove # space between (( and ))
sp_inside_fparen = remove # "( 1 )" -> "(1)" - functions
sp_inside_sparen = remove # "( 1 )" -> "(1)" - if/for/etc
sp_sizeof_paren = force # "sizeof(int)" -> "sizeof (int)"
sp_inside_braces = remove # "{ 1 }" -> "{1}"
sp_inside_braces_struct = remove # "{ 1 }" -> "{1}"
sp_inside_braces_enum = remove # "{ 1 }" -> "{1}"
sp_func_def_paren = remove # "int foo () {" -> "int foo() {"
sp_func_proto_paren = remove # "int foo ();" -> "int foo();"
sp_func_call_paren = remove # "foo (" -> "foo("
sp_return_paren = remove # "return (1);" -> "return(1);"
sp_else_brace = force # "else{" -> "else {"
sp_brace_else = force # "}else" -> "} else"

# Add or remove space before pointer star '*'
sp_before_ptr_star = force   # ignore/add/remove/force
# Add or remove space between pointer stars '*'
sp_between_ptr_star = remove   # ignore/add/remove/force
# Add or remove space after pointer star '*', if followed by a word.
sp_after_ptr_star = remove   # ignore/add/remove/force

# Add or remove space between return type and function name
# A minimum of 1 is forced except for pointer return types.
sp_type_func = force

# Add or remove space between ')' and '(' of function
sp_fparen_brace = force

################################################################################
# Comment modifications

# Whether to change cpp-comments into c-comments
cmt_cpp_to_c = false

# Whether to put a star on subsequent comment lines
# cmt_star_cont = true

# If false, disable all multi-line comment changes, including cmt_width. keyword substitution, and leading chars.
cmt_indent_multi = false

# Set the comment reflow mode (default: 0)
# 0: no reflowing (apart from the line wrapping due to cmt_width)
# 1: no touching at all
# 2: full reflow
# cmt_reflow_mode = 0

################################################################################
# Preprocessor options

# Add or remove space after # based on pp_level of #if blocks
pp_space = remove

# Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false)
pp_indent_at_level = true    # false/true
# Whether to indent '#define' at the brace level (true) or from column 1 (false)
pp_define_at_level = true    # false/true
